# -*- coding:utf-8 -*-
# @Time:2024/4/1921:01
# @Author:miuzg
# @FileName:new test2.py
# @Software:PyCharm
"""
property来代理隐藏属性可以设置、获取、删除，可以设置对属性的访问和修改
property(fget = None,fset = None,fdel = None)
fget代表获取属性的方法
fset代表设置属性的方法
fdel代表删除属性的方法
只要遇到了需要属性隐藏都要用到property
"""


# 创建银行类
class Bank:

    def __init__(self, id, pwd, money):
        # 银行卡id
        self.id = id
        # 密码
        self.pwd = pwd
        # 余额(在属性名前加上__表示隐藏，但是实际上并没有隐藏这个属性，只是将名字改为_类名__属性名，可以通过对象名._类名__属性名)
        self.__money = money

    # 获取存款
    def getMoney(self):
        return self.__money

    # 存钱
    def setMoney(self, money):
        self.__money += money
        self.__speak()

    '''
        property属性代理
        property需要有一个变量接收，我们可以通过这个变量去操作属性的隐藏
    '''
    m = property(fget=getMoney, fset=setMoney, fdel=None)

    # 隐藏方法
    def __speak(self):
        print(123456)


# 创建实例对象
bank = Bank('114514', 'qqqq12345678', 10000)
# 输出结果相当于fget也就是getMoney 10000
print(bank.m)
# 进行赋值操作调用了fset也就是setMoney
bank.m = 1500
print(bank.m)  # 123456 11500
